Từ khóa Static trong Java 您所在的位置:网站首页 Cách dùng static trong Javascript thuộc tính và Từ khóa Static trong Java

Từ khóa Static trong Java

2024-07-16 13:26| 来源: 网络整理| 查看: 265

Từ khóa Static trong Java

Từ khóa static trong Java được sử dụng chủ yếu để quản lý bộ nhớ. Chúng ta có thể áp dụng từ khóa stactic với biến, phương thức, và lớp lồng nhau.

Từ khóa Static trong Java Từ khóa Static trong Java

Từ khóa static thuộc về class chứ không phải thuộc về thể hiện của class.

Static có thể là:

Variable (Biến của class)Method (Phương thức của class)BlockNested class 1. Biến static trong Java

Nếu bạn tuyên bố bất kỳ biến nào với từ khóa static, nó là một biến static.

Biến static có thể được sử dụng để chỉ thuộc tính chung của tất cả các đối tượng (không phải là duy nhất cho từng đối tượng), ví dụ: tên công ty của nhân viên, tên trường đại học của sinh viên, v.v.Biến static chỉ nhận được bộ nhớ một lần trong khu vực class tại thời điểm tải lớp (class loading). 1.1. Ưu điểm của biến static

Biến static làm cho bộ nhớ chương trình của bạn hiệu quả hơn (tức là, nó tiết kiệm bộ nhớ).

1.2. Có vấn đề gì không có biến static? class Student{ int id; String name; String college="NIIT"; }

Giả sử có 500 sinh viên trong trường đại học NIIT, bây giờ tất cả các data member cá thể sẽ nhận được bộ nhớ mỗi khi đối tượng được tạo.

Tất cả các sinh viên có id và name duy nhất của nó, vì vậy data member cá thể là tốt trong trường hợp như vậy.

Ở đây, ‘college” đề cập đến thuộc tính chung của tất cả các đối tượng. Nếu chúng ta làm cho nó thành static, trường này sẽ chỉ nhận được cấp phát bộ nhớ một lần.

Lưu ý: Thuộc tính static chia sẻ cho tất cả các đối tượng, nó có thể gọi khi chưa cần tạo đối tượng nào.

1.3. Ví dụ về biến static

Để hiểu rõ về biến static hơn thì chúng ta sẽ cùng xem ví dụ sau:

File: TestStaticVariable1.java

// Chương trình Java ví dụ về biến static class Student{ int id; //instance variable String name; static String college ="NIIT"; //static variable //constructor Student(int i, String n){ id = i; name = n; } // Phương thức để hiển thị thông tin sin viên void display(){ System.out.println(id+" "+name+" "+college); } } // Tạo class khác để thực hiện hiển thị dữ liệu public class TestStaticVariable1{ public static void main(String args[]){ Student s1 = new Student(17,"Hải"); Student s2 = new Student(18,"Doanh"); // Chúng ta có thể thay đổi trường đại học của tất cả sv bằng 1 dòng code //Student.college="NIIT - ICT Hà Nội"; s1.display(); s2.display(); } }

Kết quả:

17 Hải NIIT 18 Doanh NIIT 1.4. Chương trình bộ đếm không có biến static

Trong ví dụ này, chúng ta đã tạo ra một biến thể hiện có tên là count được tăng lên trong hàm tạo.

Do biến đối tượng nhận được bộ nhớ tại thời điểm tạo đối tượng, mỗi đối tượng sẽ có bản sao của biến thể hiện.

Tham khảo:Tự học lập trình Java (Toàn tập)

Nếu nó được tăng lên, nó sẽ không phản ánh đến các đối tượng khác. Vì vậy, mỗi đối tượng sẽ có giá trị là 1 trong biến count.

// Chương trình Java sử dụng biến thể hiện (instance variable) // lấy bộ nhớ tại mỗi thời điểm tạo đối tượng của class. class Counter{ int count = 0;/* lấy bộ nhớ tại mỗi thời điểm thể hiện được tạo*/ Counter(){ count++; // Tăng lên 1 đơn vị System.out.println(count); } public static void main(String args[]){ // Tạo các đối tượng Counter c1=new Counter(); Counter c2=new Counter(); Counter c3=new Counter(); } }

Kết quả:

1 1 1 1.5. Chương trình bộ đếm có biến static

Như chúng ta đã đề cập ở trên, biến static sẽ chỉ nhận được bộ nhớ một lần, nếu bất kỳ đối tượng nào thay đổi giá trị của biến tĩnh, nó sẽ giữ lại giá trị của nó.

// Chương trình Java sử dụng biến static // nó chia sẻ với tất cả các đối tượng. class Counter{ static int count = 0;/* Chỉ nhận bộ nhớ một lần và giữ lại giá trị của nó*/ Counter(){ count++; // Tăng lên 1 đơn vị System.out.println(count); } public static void main(String args[]){ // Tạo các đối tượng Counter c1=new Counter(); Counter c2=new Counter(); Counter c3=new Counter(); } }

Kết quả:

1 2 3 2. Phương thức static trong Java

Nếu bạn áp dụng từ khóa static cho bất kỳ phương thức nào, nó được gọi là phương thức static.

Một phương thức static thuộc về class chứ không phải là đối tượng của một class.Một phương thức static có thể được gọi mà không cần tạo một thể hiện của một class.Một phương thức static có thể truy cập static data member và có thể thay đổi giá trị của nó. 2.1. Ví dụ về phương thức static trong Java // Chương trình Java sử dụng phương thức static class Student{ int id; String name; static String college = "NIIT"; // Phương thức static thay đổi giá trị của biến static static void change(){ college = "NIIT - ICT Hà Nội"; } // Hàm tạo để khởi tạo biến Student(int i, String n){ id = i; name = n; } // Phương thức hiển thị dữ liệu void display(){ System.out.println(id+" "+name+" "+college); } } // Class tạo và hiển thị dữ liệu của đối tượng public class TestStaticMethod{ public static void main(String args[]){ Student.change(); // Gọi phương thức change() // Tạo đối tượng Student s1 = new Student(17,"Hải"); Student s2 = new Student(18,"Doanh"); Student s3 = new Student(19,"Việt"); // Gọi phương thức hiển thị dữ liệu s1.display(); s2.display(); s3.display(); } }

Bạn đoán college lúc này là NIIT hay là NIIT – ICT Hà Nội?

Kết quả:

17 Hải NIIT - ICT Hà Nội 18 Doanh NIIT - ICT Hà Nội 19 Việt NIIT - ICT Hà Nội 2.2. Một ví dụ khác sử dụng phương thức static // Chương trình Java để lập phương của một số đã cho bằng phương thức tĩnh class Calculate{ static int cube(int x){ return x*x*x; } public static void main(String args[]){ int result = Calculate.cube(5); System.out.println(result); } }

Như bạn thấy đấy, chúng ta có thể gọi phương thức static mà không cần khởi tạo đối tượng nào cả.

Kết quả:

125 Hạn chế của phương thức static là gì?

Có 2 điểm hạn chế của phương thức static:

Phương thức static không thể sử dụng data member non-static hoặc không thể gọi phương thức non-static trực tiếp.this và super không thể được sử dụng trong bối cảnh static.

Ví dụ:

class A{ int a = 40; //non static public static void main(String args[]){ System.out.println(a); } }

Kết quả:

Compile Time Error Tại sao phương thức main của Java là static?

Đó là bởi vì đối tượng không bắt buộc phải gọi một phương thức static.

Nếu đó là một phương thức non-static, trước tiên Máy ảo Java tạo một đối tượng sau đó gọi phương thức main() sẽ dẫn đến vấn đề cấp phát thêm bộ nhớ.

3. Java static block

Java static block:

Được sử dụng để khởi tạo static data member.Nó được thực thi trước phương thức static tại thời điểm class loading. 3.1. Ví dụ về static block trong Java

Để hiểu hơn về static block chúng ta hãy xem ví dụ sau:

class A2{ static{ System.out.println("static block được gọi"); } public static void main(String args[]){ System.out.println("Hello main"); } }

Kết quả:

static block được gọi Hello main 3.3. Có thể thực thi một chương trình mà không có phương thức main() không?

Không.

Một trong những cách làm như vậy là sử dụng static block, nhưng chỉ có thể cho đến JDK 1.6. Kể từ JDK 1.7, không thể thực thi một class java mà không có phương thức main.

Bạn thử chạy thì biết:

class A3{ static{ System.out.println("static block được gọi"); System.exit(0); } }

Kết quả nếu chạy từ phiên bản JDK 1.6 trở về trước:

static block được gọi

Nhưng kể từ phiên bản JDK 1.7 trở đi thì:

Error: Main method not found in class A3, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application Bạn đã hiểu về từ khóa static trong Java chưa?

Như vậy là trong bài viết này bạn đã được tìm hiểu về từ khóa static, biến static, phương thức static và block static trong Java.

Hãy thực hiện lại các ví dụ để thực sự hiểu về static trong Java nhé.

>> Nếu muốn học Java từ cơ bản đến nâng cao về Web thì hãy tham khảo ngay Khóa học Java Fullstack: https://niithanoi.edu.vn/khoa-hoc-java-fullstack.html

Chúc bạn học tốt!

JavaDEV



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有